/**
 * 
 */
package co.edu.udistrital.audiomixer.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import co.edu.udistrital.audiomixer.bean.vo.UsuarioVO;
import co.edu.udistrital.audiomixer.entidad.Proyecto;
import co.edu.udistrital.audiomixer.entidad.Usuario;
import co.edu.udistrital.audiomixer.servicio.ProyectoServicio;
import co.edu.udistrital.audiomixer.servicio.UsuarioServicio;

/**
 * @author edwin
 * 
 */
@Named
@SessionScoped
public class ProyectoBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Proyecto proyecto = new Proyecto();

	private List<UsuarioVO> usuarios = new ArrayList<UsuarioVO>();

	@EJB
	private ProyectoServicio servicio;
	@EJB
	private UsuarioServicio servicioUsuarios;

	public void crear() {
		try {
			for (UsuarioVO usuarioVO : usuarios) {
				if (usuarioVO.isSeleccionado()) {
					Usuario usuario = usuarioVO.getUsuario();
					if(proyecto.getUsuariosProyecto()==null){
						proyecto.setUsuariosProyecto(new ArrayList<Usuario>());
					}
					proyecto.getUsuariosProyecto().add(usuario);
				}
			}
			
			if(proyecto.getUsuariosProyecto().isEmpty()){
				throw new Exception("Seleccione por lo menos un usuario");
			}
			
			proyecto = servicio.crear(proyecto);
			FacesMessage fm = new FacesMessage("Se creo Proyecto "
					+ proyecto.getNombre(), "");
			fm.setSeverity(FacesMessage.SEVERITY_INFO);
			FacesContext.getCurrentInstance().addMessage(null, fm);
			proyecto = new Proyecto();
		} catch (Exception e) {
			FacesMessage fm = new FacesMessage("No se creo Proyecto "
					+ proyecto.getNombre(), e.getMessage());
			proyecto.setUsuariosProyecto(new ArrayList<Usuario>());
			fm.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext.getCurrentInstance().addMessage(null, fm);
		}
	}

	@PostConstruct
	public void inicializar() {
		cargar();
	}

	public void cargar() {
		try {
			usuarios = new ArrayList<UsuarioVO>();
			List<Usuario> usuariosBD = servicioUsuarios.consultar();
			for (Usuario usuario : usuariosBD) {
				usuarios.add(new UsuarioVO(usuario));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public List<UsuarioVO> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<UsuarioVO> usuarios) {
		this.usuarios = usuarios;
	}

}
